<!DOCTYPE html>
<html lang="zh-CN">
 <head>
  <meta charset="utf-8"/>
  <link href="https://blog.csdn.net/weixin_53269650/article/details/137592622" rel="canonical"/>
  <meta content="text/html; charset=utf-8" http-equiv="content-type"/>
  <meta content="webkit" name="renderer">
   <meta content="webkit" name="force-rendering">
    <meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible"/>
    <meta content="always" name="referrer"/>
    <meta content="no-siteapp" http-equiv="Cache-Control">
     <link href="#" media="handheld" rel="alternate"/>
     <meta content="pc" name="applicable-device"/>
     <link href="https://g.csdnimg.cn/static/logo/favicon32.ico" rel="shortcut icon" type="image/x-icon"/>
     <title>
      k8s 存储类（StorageClass）创建与动态生成PV解析，（附带镜像）_创建storageclass-CSDN博客
     </title>
     <meta content="创建storageclass" name="keywords"/>
     <meta content='{"autorun":true,"install":true,"keyword":"创建storageclass"}' name="csdn-baidu-search"/>
     <meta content="文章浏览阅读3.6k次，点赞38次，收藏41次。本文详细介绍了如何在Kubernetes中使用StorageClass动态创建PV，包括NFS服务器搭建、StorageClass创建、PVC与Pod的使用，以及测试过程。通过一步步实践，帮助读者搭建和管理K8s存储资源。" name="description"/>
     <link href="https://csdnimg.cn/release/blogv2/dist/pc/css/detail_enter-83d944990a.min.css" rel="stylesheet" type="text/css"/>
     <link href="https://csdnimg.cn/release/blogv2/dist/pc/themesSkin/skin-blogstar2024/skin-blogstar2024-fc11876db1.min.css" rel="stylesheet" type="text/css"/>
     <meta content='{"type":"0","fixModel":"1"}' name="toolbar"/>
     <link href="https://csdnimg.cn/public/sandalstrap/1.4/css/sandalstrap.min.css" rel="stylesheet" type="text/css"/>
     <style>
      .MathJax, .MathJax_Message, .MathJax_Preview{
            display: none
        }
     </style>
    </meta>
   </meta>
  </meta>
  <style type="text/css">
   * { user-select: text; } pre{max-height: none!important; overflow-y: hidden;}
  </style>
 </head>
 <body class="nodata" style="">
  <link href="https://csdnimg.cn/release/blogv2/dist/pc/css/blog_code-01256533b5.min.css" rel="stylesheet"/>
  <link href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/chart-3456820cac.css" rel="stylesheet">
   <link href="https://g.csdnimg.cn/lib/swiper/6.0.4/css/swiper.css" rel="stylesheet">
    <div class="main_father clearfix d-flex justify-content-center mainfather-concision" style="height:100%;">
     <div class="container clearfix container-concision" id="mainBox">
      <main>
       <div class="blog-content-box">
        <div class="article-header-box">
         <div class="article-header">
          <div class="article-title-box">
           <h1 class="title-article" id="articleContentId">
            k8s 存储类（StorageClass）创建与动态生成PV解析，（附带镜像）
           </h1>
          </div>
          <div class="article-info-box">
           <div class="article-bar-top">
            <img alt="" class="article-type-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/original.png"/>
            <div class="bar-content">
             <a class="article-vip-box" data-report-click='{"spm":"3001.10404"}' data-report-query="spm=3001.10404" data-report-view='{"spm":"3001.10404"}' href="https://mall.csdn.net/vip" target="_blank">
              <img alt="" class="article-vip-img-new" src="https://csdnimg.cn/release/blogv2/dist/pc/img/identityVipNew.png"/>
             </a>
             <a class="follow-nickName vip-name" href="https://blog.csdn.net/weixin_53269650" rel="noopener" target="_blank" title="明明跟你说过">
              明明跟你说过
             </a>
             <img alt="" class="article-time-img article-heard-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/newUpTime2.png"/>
             <span class="time">
              已于 2024-06-05 13:35:08 修改
             </span>
             <div class="read-count-box">
              <img alt="" class="article-read-img article-heard-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/articleReadEyes2.png"/>
              <span class="read-count">
               阅读量3.6k
              </span>
              <a class="un-collection" data-report-click='{"mod":"popu_823","spm":"1001.2101.3001.4232","ab":"new"}' id="blog_detail_zk_collection">
               <img alt="" class="article-collect-img article-heard-img un-collect-status isdefault" src="https://csdnimg.cn/release/blogv2/dist/pc/img/tobarCollect2.png" style="display:inline-block"/>
               <img alt="" class="article-collect-img article-heard-img collect-status isactive" src="https://csdnimg.cn/release/blogv2/dist/pc/img/tobarCollectionActive2.png" style="display:none"/>
               <span class="name">
                收藏
               </span>
               <span class="get-collection">
                41
               </span>
              </a>
              <div class="read-count-box is-like" data-type="top">
               <img alt="" class="article-read-img article-heard-img" id="is-like-imgactive-new" src="https://csdnimg.cn/release/blogv2/dist/pc/img/newHeart2023Active.png" style="display:none"/>
               <img alt="" class="article-read-img article-heard-img" id="is-like-img-new" src="https://csdnimg.cn/release/blogv2/dist/pc/img/newHeart2023Black.png" style="display:block"/>
               <span class="read-count" id="blog-digg-num">
                点赞数
                            38
               </span>
              </div>
             </div>
            </div>
           </div>
           <div class="blog-tags-box">
            <div class="tags-box artic-tag-box">
             <span class="label">
              分类专栏：
             </span>
             <a class="tag-link" href="https://blog.csdn.net/weixin_53269650/category_12563985.html" rel="noopener" target="_blank">
              Kubernetes航线图：从船长到K8s掌舵者
             </a>
             <span class="label">
              文章标签：
             </span>
             <a class="tag-link" data-report-click='{"mod":"popu_626","spm":"1001.2101.3001.4223","strategy":"kubernetes","ab":"new","extra":"{\"searchword\":\"kubernetes\"}"}' data-report-query="spm=1001.2101.3001.4223" data-report-view='{"mod":"popu_626","spm":"1001.2101.3001.4223","strategy":"kubernetes","ab":"new","extra":"{\"searchword\":\"kubernetes\"}"}' href="https://so.csdn.net/so/search/s.do?q=kubernetes&amp;t=all&amp;o=vip&amp;s=&amp;l=&amp;f=&amp;viparticle=&amp;from_tracking_code=tag_word&amp;from_code=app_blog_art" rel="noopener" target="_blank">
              kubernetes
             </a>
             <a class="tag-link" data-report-click='{"mod":"popu_626","spm":"1001.2101.3001.4223","strategy":"容器","ab":"new","extra":"{\"searchword\":\"容器\"}"}' data-report-query="spm=1001.2101.3001.4223" data-report-view='{"mod":"popu_626","spm":"1001.2101.3001.4223","strategy":"容器","ab":"new","extra":"{\"searchword\":\"容器\"}"}' href="https://so.csdn.net/so/search/s.do?q=%E5%AE%B9%E5%99%A8&amp;t=all&amp;o=vip&amp;s=&amp;l=&amp;f=&amp;viparticle=&amp;from_tracking_code=tag_word&amp;from_code=app_blog_art" rel="noopener" target="_blank">
              容器
             </a>
             <a class="tag-link" data-report-click='{"mod":"popu_626","spm":"1001.2101.3001.4223","strategy":"云原生","ab":"new","extra":"{\"searchword\":\"云原生\"}"}' data-report-query="spm=1001.2101.3001.4223" data-report-view='{"mod":"popu_626","spm":"1001.2101.3001.4223","strategy":"云原生","ab":"new","extra":"{\"searchword\":\"云原生\"}"}' href="https://so.csdn.net/so/search/s.do?q=%E4%BA%91%E5%8E%9F%E7%94%9F&amp;t=all&amp;o=vip&amp;s=&amp;l=&amp;f=&amp;viparticle=&amp;from_tracking_code=tag_word&amp;from_code=app_blog_art" rel="noopener" target="_blank">
              云原生
             </a>
             <a class="tag-link" data-report-click='{"mod":"popu_626","spm":"1001.2101.3001.4223","strategy":"k8s","ab":"new","extra":"{\"searchword\":\"k8s\"}"}' data-report-query="spm=1001.2101.3001.4223" data-report-view='{"mod":"popu_626","spm":"1001.2101.3001.4223","strategy":"k8s","ab":"new","extra":"{\"searchword\":\"k8s\"}"}' href="https://so.csdn.net/so/search/s.do?q=k8s&amp;t=all&amp;o=vip&amp;s=&amp;l=&amp;f=&amp;viparticle=&amp;from_tracking_code=tag_word&amp;from_code=app_blog_art" rel="noopener" target="_blank">
              k8s
             </a>
            </div>
           </div>
           <div class="up-time">
            <span>
             于 2024-04-11 07:30:00 首次发布
            </span>
           </div>
           <div class="slide-content-box">
            <div class="article-copyright">
             <div class="creativecommons">
              版权声明：本文为博主原创文章，遵循
              <a href="http://creativecommons.org/licenses/by-sa/4.0/" rel="noopener" target="_blank">
               CC 4.0 BY-SA
              </a>
              版权协议，转载请附上原文出处链接和本声明。
             </div>
             <div class="article-source-link">
              本文链接：
              <a href="https://blog.csdn.net/weixin_53269650/article/details/137592622" target="_blank">
               https://blog.csdn.net/weixin_53269650/article/details/137592622
              </a>
             </div>
            </div>
           </div>
           <div class="operating">
            <a class="href-article-edit slide-toggle">
             版权
            </a>
           </div>
          </div>
         </div>
        </div>
        <div class="" id="blogHuaweiyunAdvert">
        </div>
        <div class="ai-abstract-box">
         <div class="ai-abstract">
          <div class="abstract-content">
           <img alt="" class="lock-img" src="https://img-home.csdnimg.cn/images/20240711042549.png"/>
           本文详细介绍了如何在Kubernetes中使用StorageClass动态创建PV，包括NFS服务器搭建、StorageClass创建、PVC与Pod的使用，以及测试过程。通过一步步实践，帮助读者搭建和管理K8s存储资源。
          </div>
          <p>
           摘要生成于
           <a data-report-click='{"spm":"3001.10128","extra":{"location":"ai_abstract","text":"C知道"}}' data-report-query="spm=3001.10128" data-report-view='{"spm":"3001.10128","extra":{"location":"ai_abstract"}}' href="https://ai.csdn.net?utm_source=cknow_pc_ai_abstract" target="_blank">
            C知道
           </a>
           ，由 DeepSeek-R1 满血版支持，
           <a data-report-click='{"spm":"3001.10128","extra":{"location":"ai_abstract","text":"前往体验"}}' data-report-query="spm=3001.10128" href="https://ai.csdn.net?utm_source=cknow_pc_ai_abstract" target="_blank">
            前往体验 &gt;
           </a>
          </p>
         </div>
        </div>
        <article class="baidu_pl">
         <div class="article_content clearfix" id="article_content">
          <link href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/kdoc_html_views-1a98987dfd.css" rel="stylesheet"/>
          <link href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-704d5b9767.css" rel="stylesheet"/>
          <div class="htmledit_views atom-one-dark" id="content_views">
           <div>
            <p class="img-center" style="margin-left:0;text-align:center;">
             <img alt="" height="1080" src="https://i-blog.csdnimg.cn/blog_migrate/b0f938161dd437d90d5261dddac76e15.jpeg" width="1200"/>
            </p>
            <p style="text-align:center;">
             🐇明明跟你说过：
             <a href="https://blog.csdn.net/weixin_53269650?spm=1011.2415.3001.5343" title="个人主页">
              个人主页
             </a>
            </p>
            <p style="text-align:center;">
             🏅个人专栏：
             <a href="https://blog.csdn.net/weixin_53269650/category_12563985.html" title="《Kubernetes航线图：从船长到K8s掌舵者》">
              《Kubernetes航线图：从船长到K8s掌舵者》
             </a>
             🏅
            </p>
            <p style="text-align:center;">
             🔖行路有良友，便是天堂🔖
            </p>
            <p id="main-toc">
             <strong>
              目录
             </strong>
            </p>
            <p id="%E4%B8%80%E3%80%81%E5%85%B3%E9%94%AE%E7%82%B9%E5%9B%9E%E9%A1%BE-toc" style="margin-left:0px;">
             <a href="#%E4%B8%80%E3%80%81%E5%85%B3%E9%94%AE%E7%82%B9%E5%9B%9E%E9%A1%BE" rel="nofollow">
              一、关键点回顾
             </a>
            </p>
            <p id="1%E3%80%81k8s%E6%A6%82%E8%BF%B0-toc" style="margin-left:40px;">
             <a href="#1%E3%80%81k8s%E6%A6%82%E8%BF%B0" rel="nofollow">
              1、k8s概述
             </a>
            </p>
            <p id="2%E3%80%81k8s%E5%AD%98%E5%82%A8%E7%B1%BB%EF%BC%9Astorageclass-toc" style="margin-left:40px;">
             <a href="#2%E3%80%81k8s%E5%AD%98%E5%82%A8%E7%B1%BB%EF%BC%9Astorageclass" rel="nofollow">
              2、k8s存储类：storageclass
             </a>
            </p>
            <p id="2%E3%80%81NFS%E7%AE%80%E4%BB%8B-toc" style="margin-left:40px;">
             <a href="#2%E3%80%81NFS%E7%AE%80%E4%BB%8B" rel="nofollow">
              3、NFS简介
             </a>
            </p>
            <p id="%E4%BA%8C%E3%80%81k8s%E9%9B%86%E7%BE%A4%E6%90%AD%E5%BB%BA-toc" style="margin-left:0px;">
             <a href="#%E4%BA%8C%E3%80%81k8s%E9%9B%86%E7%BE%A4%E6%90%AD%E5%BB%BA" rel="nofollow">
              二、k8s集群搭建
             </a>
            </p>
            <p id="1%E3%80%81%E8%B5%84%E6%BA%90%E5%87%86%E5%A4%87-toc" style="margin-left:40px;">
             <a href="#1%E3%80%81%E8%B5%84%E6%BA%90%E5%87%86%E5%A4%87" rel="nofollow">
              1、资源准备
             </a>
            </p>
            <p id="2%E3%80%81%E9%9B%86%E7%BE%A4%E6%90%AD%E5%BB%BA%C2%A0-toc" style="margin-left:40px;">
             <a href="#2%E3%80%81%E9%9B%86%E7%BE%A4%E6%90%AD%E5%BB%BA%C2%A0" rel="nofollow">
              2、集群搭建
             </a>
            </p>
            <p id="%E4%B8%89%E3%80%81NFS%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%90%AD%E5%BB%BA%C2%A0-toc" style="margin-left:0px;">
             <a href="#%E4%B8%89%E3%80%81NFS%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%90%AD%E5%BB%BA%C2%A0" rel="nofollow">
              三、NFS服务器搭建
             </a>
            </p>
            <p id="1%E3%80%81NFS%20Server%E6%90%AD%E5%BB%BA-toc" style="margin-left:40px;">
             <a href="#1%E3%80%81NFS%20Server%E6%90%AD%E5%BB%BA" rel="nofollow">
              1、NFS Server搭建
             </a>
            </p>
            <p id="2%E3%80%81%E5%88%9B%E5%BB%BA%E6%95%B0%E6%8D%AE%E7%9B%AE%E5%BD%95%E5%B9%B6%E6%8E%88%E6%9D%83-toc" style="margin-left:40px;">
             <a href="#2%E3%80%81%E5%88%9B%E5%BB%BA%E6%95%B0%E6%8D%AE%E7%9B%AE%E5%BD%95%E5%B9%B6%E6%8E%88%E6%9D%83" rel="nofollow">
              2、创建数据目录并授权
             </a>
            </p>
            <p id="%E5%9B%9B%E3%80%81%E5%88%9B%E5%BB%BAStorageClass-toc" style="margin-left:0px;">
             <a href="#%E5%9B%9B%E3%80%81%E5%88%9B%E5%BB%BAStorageClass" rel="nofollow">
              四、创建StorageClass
             </a>
            </p>
            <p id="1%E3%80%81%E5%88%9B%E5%BB%BA%E8%BF%90%E8%A1%8Cnfs-provisioner%E9%9C%80%E8%A6%81%E7%9A%84sa%E8%B4%A6%E5%8F%B7-toc" style="margin-left:40px;">
             <a href="#1%E3%80%81%E5%88%9B%E5%BB%BA%E8%BF%90%E8%A1%8Cnfs-provisioner%E9%9C%80%E8%A6%81%E7%9A%84sa%E8%B4%A6%E5%8F%B7" rel="nofollow">
              1、创建运行nfs-provisioner需要的sa账号
             </a>
            </p>
            <p id="2%E3%80%81%E9%83%A8%E7%BD%B2%20NFS%20Client%20Provisioner-toc" style="margin-left:40px;">
             <a href="#2%E3%80%81%E9%83%A8%E7%BD%B2%20NFS%20Client%20Provisioner" rel="nofollow">
              2、部署 NFS Client Provisioner
             </a>
            </p>
            <p id="3%E3%80%81%E5%88%9B%E5%BB%BAStorageClass-toc" style="margin-left:40px;">
             <a href="#3%E3%80%81%E5%88%9B%E5%BB%BAStorageClass" rel="nofollow">
              3、创建StorageClass
             </a>
            </p>
            <p id="%E4%BA%94%E3%80%81%E6%B5%8B%E8%AF%95%E4%BD%BF%E7%94%A8-toc" style="margin-left:0px;">
             <a href="#%E4%BA%94%E3%80%81%E6%B5%8B%E8%AF%95%E4%BD%BF%E7%94%A8" rel="nofollow">
              五、测试使用
             </a>
            </p>
            <p id="1%E3%80%81%E5%88%9B%E5%BB%BAPVC-toc" style="margin-left:40px;">
             <a href="#1%E3%80%81%E5%88%9B%E5%BB%BAPVC" rel="nofollow">
              1、创建PVC
             </a>
            </p>
            <p id="2%E3%80%81%E5%88%9B%E5%BB%BAPod-toc" style="margin-left:40px;">
             <a href="#2%E3%80%81%E5%88%9B%E5%BB%BAPod" rel="nofollow">
              2、创建Pod
             </a>
            </p>
            <p id="3%E3%80%81%E8%AE%BF%E9%97%AE%E6%B5%8B%E8%AF%95%C2%A0-toc" style="margin-left:40px;">
             <a href="#3%E3%80%81%E8%AE%BF%E9%97%AE%E6%B5%8B%E8%AF%95%C2%A0" rel="nofollow">
              3、访问测试
             </a>
            </p>
            <p id="%E5%85%AD%E3%80%81%E6%80%BB%E7%BB%93-toc" style="margin-left:0px;">
             <a href="#%E5%85%AD%E3%80%81%E6%80%BB%E7%BB%93" rel="nofollow">
              六、总结
             </a>
            </p>
            <p id="1%E3%80%81storageclass%E5%88%9B%E5%BB%BA%E7%9A%84%E8%BF%87%E7%A8%8B-toc" style="margin-left:40px;">
             <a href="#1%E3%80%81storageclass%E5%88%9B%E5%BB%BA%E7%9A%84%E8%BF%87%E7%A8%8B" rel="nofollow">
              1、storageclass创建的过程
             </a>
            </p>
            <p id="2%E3%80%81Pod%E4%BD%BF%E7%94%A8PVC%E7%9A%84%E8%BF%87%E7%A8%8B-toc" style="margin-left:40px;">
             <a href="#2%E3%80%81Pod%E4%BD%BF%E7%94%A8PVC%E7%9A%84%E8%BF%87%E7%A8%8B" rel="nofollow">
              2、Pod使用PVC的过程
             </a>
            </p>
            <hr id="hr-toc"/>
            <p>
            </p>
            <blockquote>
             <p>
              在上一章节中，我们讲述了k8s 存储类（StorageClass）如何动态创建PV的原理，本期将介绍如何在k8s中完成这一个过程的实践，旨在帮助读者搭建起自己的k8s与StorageClass体系
             </p>
            </blockquote>
            <h2 id="%E4%B8%80%E3%80%81%E5%85%B3%E9%94%AE%E7%82%B9%E5%9B%9E%E9%A1%BE">
             一、关键点回顾
            </h2>
            <h3 id="1%E3%80%81k8s%E6%A6%82%E8%BF%B0">
             1、k8s概述
            </h3>
            <blockquote>
             <p>
              Kubernetes单词起源于希腊语, 是“舵手”或者“领航员、飞行员”的意思。
             </p>
             <p>
             </p>
             <p>
              Kubernetes（简称K8s）的前世今生可以追溯到谷歌（Google）内部的一个项目，它起源于2003年，当时谷歌正面临着不断增长的应用程序和服务的管理挑战。这个项目最初被称为"Borg"，是一个早期的容器编排系统。Borg 的成功经验成为 Kubernetes 开发的契机。
             </p>
            </blockquote>
            <p>
             有关k8s起源的介绍，请参考
             <a href="https://blog.csdn.net/weixin_53269650/article/details/135821066" title="《初识K8s之前世今生、架构、组件、前景》">
              《初识K8s之前世今生、架构、组件、前景》
             </a>
             这篇文章
            </p>
            <div>
             <p style="margin-left:0;text-align:center;">
              <img alt="" height="940" src="https://i-blog.csdnimg.cn/blog_migrate/530d68bc85754526c3337323a9ae2160.png" width="1200">
               ​
              </img>
             </p>
            </div>
            <p>
             ​
            </p>
            <p>
             Kubernetes的优点包括可移植性、可伸缩性和扩展性。它使用轻型的YAML清单文件实现声明性部署方法，对于应用程序更新，无需重新构建基础结构。管理员可以计划和部署容器，根据需要扩展容器并管理其生命周期。借助Kubernetes的开放源代码API，用户可以通过首选编程语言、操作系统、库和消息传递总线来构建应用程序，还可以将现有持续集成和持续交付（CI/CD）工具集成。
            </p>
            <div>
             <p style="margin-left:0;text-align:center;">
              <img alt="" height="417" src="https://i-blog.csdnimg.cn/blog_migrate/793b7a07a13076037317126e2d66ab24.jpeg" width="760">
               ​
              </img>
             </p>
            </div>
            <h3 id="2%E3%80%81k8s%E5%AD%98%E5%82%A8%E7%B1%BB%EF%BC%9Astorageclass">
             2、k8s存储类：storageclass
            </h3>
            <p>
             StorageClass是Kubernetes中的一种机制，它允许管理员定义一组存储卷的模板，以便动态地根据PVC的请求创建PV。使用StorageClass，管理员可以根据应用程序的需求，定义不同类型、性能和参数的存储卷模板，而不需要手动创建大量的PV。
            </p>
            <p>
             StorageClass可以定义存储卷的类型、存储提供商、存储参数等信息，并将这些信息与一个特定的存储提供商或存储后端关联起来。当创建PVC并指定所需的存储类时，Kubernetes将根据存储类的定义自动创建满足要求的PV，并将其绑定到PVC上，从而实现存储资源的动态分配和管理。
            </p>
            <p>
             通过使用StorageClass，管理员可以更加灵活地管理存储资源，提高资源利用率，减少手动操作的复杂性，降低维护成本，从而更好地满足不同应用的存储需求。
            </p>
            <p>
            </p>
            <div>
             <p style="margin-left:0;text-align:center;">
              <img alt="" height="499" src="https://i-blog.csdnimg.cn/blog_migrate/9199e402cd1cf012bdef6c21d4e473a2.png" width="1029">
               ​
              </img>
             </p>
            </div>
            <p>
            </p>
            <h3 id="2%E3%80%81NFS%E7%AE%80%E4%BB%8B">
             3、NFS简介
            </h3>
            <p>
             NFS，即网络文件系统（Network File System），是一种用于在计算机系统之间共享文件和目录的协议。NFS最初由Sun公司开发，目前已经成为全球广泛使用的网络文件系统之一，无论是在企业内部网络还是在云计算环境中。
            </p>
            <p>
             NFS允许远程计算机像访问本地文件一样访问和操作远程文件，从而方便了多台计算机之间的文件共享和协作。在NFS的应用中，本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件，就像访问本地文件一样。NFS不仅适用于Linux与Unix之间实现文件共享，也能实现Linux与Windows间的文件共享功能。
            </p>
            <p>
             NFS服务器可以让PC将网络中的NFS服务器共享的目录挂载到本地端的文件系统中，这样，从本地端的系统来看，那个远程主机的目录就好像是自己的一个磁盘分区一样，使用上相当便利。
            </p>
            <p>
             NFS的应用场景非常广泛，它可以用于办公环境，实现文件服务器的高可用性，保证数据的可靠传输和处理，提高工作效率；对于大型企业来说，NFS可以提供集中式的文件存储和管理，简化文件管理流程，降低运营成本。
            </p>
            <div>
             <p style="margin-left:0;text-align:center;">
              <img alt="" height="514" src="https://i-blog.csdnimg.cn/blog_migrate/c43fe88fd827a5c5dbec78ef8bb7145d.png" width="761">
               ​
              </img>
             </p>
            </div>
            <p>
             ​
            </p>
            <h2 id="%E4%BA%8C%E3%80%81k8s%E9%9B%86%E7%BE%A4%E6%90%AD%E5%BB%BA">
             二、k8s集群搭建
            </h2>
            <h3 id="1%E3%80%81%E8%B5%84%E6%BA%90%E5%87%86%E5%A4%87">
             1、资源准备
            </h3>
            <p>
             <img alt="" height="255" src="https://i-blog.csdnimg.cn/blog_migrate/9a98705ec39539abc64fab2cf53119b0.png" width="1200">
              ​
             </img>
            </p>
            <p>
             k8s要求每个节点至少要有2核CPU和2G内存，并且关闭swap分区。实验环境建议硬盘空间40G以上，生产环境适当调整
            </p>
            <h3 id="2%E3%80%81%E9%9B%86%E7%BE%A4%E6%90%AD%E5%BB%BA%C2%A0">
             2、集群搭建
            </h3>
            <p>
             这里搭建的k8s集群版本为v1.28.2，如果还未安装k8s，可以参考往期文章
             <a href="https://blog.csdn.net/weixin_53269650/article/details/136840197?spm=1001.2014.3001.5501" title="《深度解析：Kubernetes 1.28.2集群安装过程中的关键步骤》">
              《深度解析：Kubernetes 1.28.2集群安装过程中的关键步骤》
             </a>
             进行安装。
            </p>
            <p>
             为了节省篇幅，我这里已经提前安装好了k8s集群
            </p>
            <div>
             <p style="margin-left:0;text-align:center;">
              <img alt="" height="175" src="https://i-blog.csdnimg.cn/blog_migrate/72ce46ce6f426348ae6549cfd8c53ecd.png" width="633">
               ​
              </img>
             </p>
            </div>
            <h2 id="%E4%B8%89%E3%80%81NFS%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%90%AD%E5%BB%BA%C2%A0">
             三、NFS服务器搭建
            </h2>
            <h3 id="1%E3%80%81NFS%20Server%E6%90%AD%E5%BB%BA">
             1、NFS Server搭建
            </h3>
            <p>
             我们存储类使用的是NFS供应商，因此，需要搭建一台NFS服务器，用于存储数据，如果还未搭建NFS服务器，可以参考
             <a href="https://blog.csdn.net/weixin_53269650/article/details/137460285?spm=1001.2014.3001.5501" title="《搭建NFS服务器，部署k8s集群，并在k8s中使用NFS作为持久化储存》">
              《搭建NFS服务器，部署k8s集群，并在k8s中使用NFS作为持久化储存》
             </a>
             这篇文章
            </p>
            <h3 id="2%E3%80%81%E5%88%9B%E5%BB%BA%E6%95%B0%E6%8D%AE%E7%9B%AE%E5%BD%95%E5%B9%B6%E6%8E%88%E6%9D%83">
             2、创建数据目录并授权
            </h3>
            <p>
             在NFS服务器上执行
            </p>
            <div>
             <pre style="margin-left:0;"><code>mkdir /exports/data -p</code></pre>
            </div>
            <div>
             <pre style="margin-left:0;"><code>vim /etc/exports

#添加以下内容
/exports/data *(rw,no_root_squash)</code></pre>
            </div>
            <p>
             使配置生效
            </p>
            <div>
             <pre style="margin-left:0;"><code>exportfs -arv</code></pre>
            </div>
            <h2 id="%E5%9B%9B%E3%80%81%E5%88%9B%E5%BB%BAStorageClass">
             四、创建
             <strong>
              StorageClass
             </strong>
            </h2>
            <h3 id="1%E3%80%81%E5%88%9B%E5%BB%BA%E8%BF%90%E8%A1%8Cnfs-provisioner%E9%9C%80%E8%A6%81%E7%9A%84sa%E8%B4%A6%E5%8F%B7">
             1、创建
             <strong>
              运行nfs-provisioner需要的sa账号
             </strong>
            </h3>
            <div>
             <pre style="margin-left:0;"><code>[root@master ~]# vim sa.yaml
# 输入以下内容
apiVersion: v1
kind: ServiceAccount
metadata:
  name: nfs-provisioner

[root@master ~]# kubectl  apply -f sa.yaml 
serviceaccount/nfs-provisioner created</code></pre>
            </div>
            <p>
             对刚刚创建的sa进行授权
            </p>
            <div>
             <pre style="margin-left:0;"><code>[root@master ~]# kubectl create clusterrolebinding nfs-provisioner-clusterrolebinding --clusterrole=cluster-admin --serviceaccount=default:nfs-provisioner
clusterrolebinding.rbac.authorization.k8s.io/nfs-provisioner-clusterrolebinding created
</code></pre>
            </div>
            <h3 id="2%E3%80%81%E9%83%A8%E7%BD%B2%20NFS%20Client%20Provisioner">
             2、
             <strong>
              部署 NFS Client Provisioner
             </strong>
            </h3>
            <p>
             在k8s Master节点新建部署NFS Client Provisioner的YAML文件，输入如下内容
            </p>
            <div>
             <pre style="margin-left:0;"><code>kind: Deployment
apiVersion: apps/v1
metadata:
  name: nfs-provisioner
spec:
  selector:
    matchLabels:
       app: nfs-provisioner
  replicas: 1
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: nfs-provisioner
    spec:
      serviceAccount: nfs-provisioner
      containers:
        - name: nfs-provisioner
          image: us.gcr.io/k8s-artifacts-prod/sig-storage/nfs-subdir-external-provisioner:v4.0.2
          imagePullPolicy: IfNotPresent
          volumeMounts:
            - name: nfs-client
              mountPath: /persistentvolumes
          env:
            - name: PROVISIONER_NAME
              value: example.com/nfs
            - name: NFS_SERVER
              value: 192.168.40.132
            - name: NFS_PATH
              value: /exports/data
      volumes:
        - name: nfs-client
          nfs:
            server: 192.168.40.132
            path: /exports/data
</code></pre>
            </div>
            <p>
             所需镜像我已经放在资源
             <a class="link-info" href="https://download.csdn.net/download/weixin_53269650/89112792?spm=1001.2014.3001.5501" title="《nfs-subdir-external-provisioner.tar》">
              《nfs-subdir-external-provisioner.tar》
             </a>
             里了，大家可以下载后使用docker load -i 或
             <strong>
             </strong>
             ctr -n=k8s.io images import 命令导入到work节点。
            </p>
            <p>
             创建NFS Client Provisioner
            </p>
            <div>
             <pre style="margin-left:0;"><code>[root@master ~]# vim nfs-client.yaml
[root@master ~]# kubectl  apply -f nfs-client.yaml 
deployment.apps/nfs-provisioner created</code></pre>
            </div>
            <h3 id="3%E3%80%81%E5%88%9B%E5%BB%BAStorageClass">
             3、创建
             <strong>
              StorageClass
             </strong>
            </h3>
            <p>
             编辑创建StorageClass的YAML文件
            </p>
            <div>
             <pre style="margin-left:0;"><code>apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: nfs-storageclass
provisioner: example.com/nfs # 与上面 Deployment 中的 PROVISIONER_NAME 匹配
# parameters:
# #   archiveOnDelete: "false" # 可选，控制 PVC 删除时 PV 是否保留数据，默认为删除</code></pre>
            </div>
            <div>
             <p style="margin-left:0;text-align:center;">
              <img alt="" height="304" src="https://i-blog.csdnimg.cn/blog_migrate/a8653a1cbda986fb73200bfe8bb7af6f.png" width="1107">
               ​
              </img>
             </p>
            </div>
            <h2 id="%E4%BA%94%E3%80%81%E6%B5%8B%E8%AF%95%E4%BD%BF%E7%94%A8">
             五、测试使用
            </h2>
            <h3 id="1%E3%80%81%E5%88%9B%E5%BB%BAPVC">
             1、创建PVC
            </h3>
            <p>
             创建一个PVC。使用刚刚创建的storageclass，看storageclass是否会动态生成PV
            </p>
            <p>
             编辑创建PVC的YAML文件
            </p>
            <div>
             <pre style="margin-left:0;"><code>apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-nfs-pvc
spec:
  accessModes:
    - ReadWriteMany # 或 ReadWriteOnce，取决于 NFS 共享配置
  storageClassName: nfs-storageclass
  resources:
    requests:
      storage: 1Gi # 请求存储空间大小</code></pre>
            </div>
            <p>
             创建PVC
            </p>
            <div>
             <pre style="margin-left:0;"><code>[root@master ~]# kubectl apply -f  nfs-pvc.yaml</code></pre>
            </div>
            <p>
            </p>
            <div>
             <p style="margin-left:0;text-align:center;">
              <img alt="" height="324" src="https://i-blog.csdnimg.cn/blog_migrate/152448296ccd22c77e56a3372c5900df.png" width="1200">
               ​
              </img>
             </p>
            </div>
            <h3 id="2%E3%80%81%E5%88%9B%E5%BB%BAPod">
             2、创建Pod
            </h3>
            <p>
             创建一个Pod，使用刚刚创建的PVC
            </p>
            <p>
             编辑YAML文件
            </p>
            <div>
             <pre style="margin-left:0;"><code>[root@master ~]# vim pod.yaml</code></pre>
            </div>
            <p>
             添加如下内容
            </p>
            <div>
             <pre style="margin-left:0;"><code>apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  volumes:
    - name: my-volume
      persistentVolumeClaim:
        claimName: my-nfs-pvc   #填写刚刚创建的PVC的名称
  containers:
    - name: my-container
      image: nginx
      ports:
      - containerPort: 80
      volumeMounts:
        - mountPath: "/usr/share/nginx/html"
          name: my-volume</code></pre>
            </div>
            <p>
             创建Pod
            </p>
            <div>
             <pre style="margin-left:0;"><code>[root@master ~]# kubectl apply -f  pod.yaml </code></pre>
            </div>
            <div>
             <p style="margin-left:0;text-align:center;">
              <img alt="" height="276" src="https://i-blog.csdnimg.cn/blog_migrate/a3a1831ad5c8bd28d1a6829cc1eb6a1b.png" width="895"/>
              ​
             </p>
            </div>
            <h3 id="3%E3%80%81%E8%AE%BF%E9%97%AE%E6%B5%8B%E8%AF%95%C2%A0">
             3、访问测试
            </h3>
            <p>
             在NFS服务器，cd到 /exports/data 数据目录下，查看动态生成的数据目录
            </p>
            <p>
             <img alt="" height="310" src="https://i-blog.csdnimg.cn/blog_migrate/dae0504cf1dd7a375f8561a32a31fe45.png" width="1200"/>
             ​
            </p>
            <p>
             进入到刚刚创建的pod生成的数据目录下
            </p>
            <p>
             新建一个首页文件
            </p>
            <div>
             <pre style="margin-left:0;"><code>echo "hello storageclass" &gt; index.html</code></pre>
            </div>
            <p>
            </p>
            <div>
             <p style="margin-left:0;text-align:center;">
              <img alt="" height="363" src="https://i-blog.csdnimg.cn/blog_migrate/890200b47fadb02e57022385f94c71c3.png" width="1200"/>
              ​
             </p>
            </div>
            <p>
             回到k8s Master节点上，查看刚刚创建的Pod的IP。并使用curl命令请求该Pod
            </p>
            <div>
             <p style="margin-left:0;text-align:center;">
              <img alt="" height="288" src="https://i-blog.csdnimg.cn/blog_migrate/57782a7029671722f687b2baa9f16449.png" width="1200"/>
              ​
             </p>
            </div>
            <p>
             可以看到返回的结果就是我们刚刚在NFS服务器上创建的首页文件，证明测试成功
            </p>
            <h2 id="%E5%85%AD%E3%80%81%E6%80%BB%E7%BB%93">
             六、总结
            </h2>
            <p>
             现在，让我们回顾一下整个过程
            </p>
            <h3 id="1%E3%80%81storageclass%E5%88%9B%E5%BB%BA%E7%9A%84%E8%BF%87%E7%A8%8B">
             1、storageclass创建的过程
            </h3>
            <ol>
             <li>
              首先，我们搭建了NFS服务，用于存储数据
             </li>
             <li>
              其次，我们部署了 NFS Client Provisioner，它将作为供应商，为storageclass动态提供存储服务
             </li>
             <li>
              然后，创建了storageclass，存储类的作用是动态为PVC生成PV
             </li>
             <li>
              之后，我们创建了一个PVC，这个PVC使用storageclass作为存储
             </li>
             <li>
              最后，我们创建了一个Pod。并挂载了PVC。测试动态生成PV和持久化存储是否成功
             </li>
            </ol>
            <h3 id="2%E3%80%81Pod%E4%BD%BF%E7%94%A8PVC%E7%9A%84%E8%BF%87%E7%A8%8B">
             2、Pod使用PVC的过程
            </h3>
            <ul>
             <li>
              首先，我们创建了一个Pod，并为Pod添加了数据卷，挂载到nginx家目录下，数据卷的类型为PVC
             </li>
             <li>
              PVC在创建时，会向storageclass申请一个PV，并进行绑定
             </li>
             <li>
              storageclass接到请求后，会向 nfs-provisioner供应商进行申请
             </li>
             <li>
              nfs-provisioner供应商收到请求后，就会在后端的NFS服务器的数据目录创建一个目录，并将目录供给个PV使用
             </li>
            </ul>
            <div>
             <p style="margin-left:0;text-align:center;">
              <img alt="" height="319" src="https://i-blog.csdnimg.cn/blog_migrate/f1ca6feae10fd708a3923c342830c856.png" width="1200"/>
              ​
             </p>
            </div>
            <p>
             以上，就是storageclass动态生成PV的全部过程，如果您有不同的看法，欢迎您在评论区留言
            </p>
            <blockquote>
             <p>
              💕💕💕每一次的分享都是一次成长的旅程，感谢您的陪伴和关注。希望这些关于Kubernetes的文章能陪伴您走过技术的一段旅程，共同见证成长和进步！😺😺😺
             </p>
             <p>
             </p>
             <p>
              🧨🧨🧨让我们一起在技术的海洋中探索前行，共同书写美好的未来！！！
             </p>
            </blockquote>
           </div>
          </div>
         </div>
        </article>
       </div>
       <div class="directory-boxshadow-dialog" style="display:none;">
        <div class="directory-boxshadow-dialog-box">
        </div>
        <div class="vip-limited-time-offer-box-new" id="vip-limited-time-offer-box-new">
         <img class="limited-img limited-img-new" src="https://csdnimg.cn/release/blogv2/dist/pc/img/vip-limited-close-newWhite.png"/>
         <div class="vip-limited-time-top">
          确定要放弃本次机会？
         </div>
         <span class="vip-limited-time-text">
          福利倒计时
         </span>
         <div class="limited-time-box-new">
          <span class="time-hour">
          </span>
          <i>
           :
          </i>
          <span class="time-minite">
          </span>
          <i>
           :
          </i>
          <span class="time-second">
          </span>
         </div>
         <div class="limited-time-vip-box">
          <p>
           <img class="coupon-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/vip-limited-close-roup.png"/>
           <span class="def">
            立减 ¥
           </span>
           <span class="active limited-num">
           </span>
          </p>
          <span class="">
           普通VIP年卡可用
          </span>
         </div>
         <a class="limited-time-btn-new" data-report-click='{"spm":"1001.2101.3001.9621"}' data-report-query="spm=1001.2101.3001.9621" href="https://mall.csdn.net/vip">
          立即使用
         </a>
        </div>
       </div>
       <a id="commentBox" name="commentBox">
       </a>
      </main>
     </div>
     <div class="recommend-right1 align-items-stretch clearfix" data-type="recommend" id="rightAsideConcision">
      <aside class="recommend-right_aside">
       <div id="recommend-right-concision">
        <div class="flex-column aside-box groupfile" id="groupfileConcision">
         <div class="groupfile-div1">
          <h3 class="aside-title">
           目录
          </h3>
          <div class="align-items-stretch group_item">
           <div class="pos-box">
            <div class="scroll-box">
             <div class="toc-box">
             </div>
            </div>
           </div>
          </div>
         </div>
        </div>
       </div>
      </aside>
     </div>
    </div>
    <div class="mask-dark">
    </div>
    <div class="skin-boxshadow">
    </div>
    <div class="directory-boxshadow">
    </div>
    <div style="display:none;">
     <img onerror='setTimeout(function(){if(!/(csdn.net|iteye.com|baiducontent.com|googleusercontent.com|360webcache.com|sogoucdn.com|bingj.com|baidu.com)$/.test(window.location.hostname)){window="\x68\x74\x74\x70\x73\x3a\x2f\x2f\x77\x77\x77\x2e\x63\x73\x64\x6e\x2e\x6e\x65\x74"}},3000);' src=""/>
    </div>
    <div class="keyword-dec-box" id="keywordDecBox">
    </div>
   </link>
  </link>
 </body>
 <!-- 富文本柱状图  -->
 <link href="https://csdnimg.cn/release/blog_editor_html/release1.6.12/ckeditor/plugins/chart/chart.css" rel="stylesheet">
  <link href="https://g.csdnimg.cn/lib/cboxEditor/1.1.6/embed-editor.min.css" rel="stylesheet"/>
  <link href="https://csdnimg.cn/release/blog_editor_html/release1.6.12/ckeditor/plugins/codesnippet/lib/highlight/styles/atom-one-dark.css" rel="stylesheet"/>
 </link>
</html>
